﻿#define _CRT_SECURE_NO_WARNINGS  1//处理scanf被忽略的代码
#pragma warning(disable:6031)//处理scanf被忽略的代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//现在有一个长度为 n 的正整数序列，其中只有一种数值出现了奇数次，其他数值均出现偶数次，请你找出那个出现奇数次的数值。
int fun(int* arr, int x)
{
	int z = 0;
	for (int y = 0;y < x;y++)
	{
		z ^= arr[y];
	}
	return z;
}
int main1()
{
	int x;
	scanf("%d", &x);
	int* arr = (int*)malloc(x * sizeof(int));
	for (int y = 0;y < x;y++)
		scanf("%d", &arr[y]);
	printf("%d ", fun(arr, x));
	free(arr);
	return 0;
}
int findPeakElement(int* nums, int numsLen)
{
	for (int x = 0;x < numsLen - 1;x++)
	{
		if (nums[x] > nums[x + 1])
			return x;
	}
	return numsLen - 1;
}
//给定一个长度为n的数组nums，请你找到峰值并返回其索引。数组可能包含多个峰值，在这种情况下，返回任何一个所在位置即可。
//1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
//2.假设 nums[-1] = nums[n] =
//−
//∞
//−∞
//3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
//4.你可以使用O(logN)的时间复杂度实现此问题吗？
int main2()
{
	int arr[] = { 1,3,34,56,67,5,534,34,34,34 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	printf("%d ", findPeakElement(arr, sz));
	return 0;
}
void fun2(char* arr, int count)
{
	for (int y = 0;y < count;y++)
		printf("%c ", arr[y]);
}
//输入一个字符串和一个整数 k ，截取字符串的前k个字符并输出
int main3()
{
	char arr[100];
	fgets(arr, sizeof(arr), stdin);
	int count = strlen(arr);
	int x;
	scanf("%d", &x);
	if (x > count)
	{
		printf("超出字符串范围");
		return;
	}
	fun2(arr, x);
	return 0;
}
int main4()
{
	char str[101];
	while (scanf("%s", str) > 0) {
		int n;
		scanf("%d", &n);
		str[n] = '\0';
		printf("%s\n", str);
	}
}
typedef union
{
	int a;
	struct
	{
		short b;
		short c;
	};

}X;
int main5()
{
	X x;
	x.a = 0x20150810;
	printf("%x,%x\n", x.b, x.c);
}
//牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
//但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
//牛牛希望你能帮他计算一共有多少个可能的数对。
int main() 
{
	long n, k = 0;
	long count = 0;
	while (~scanf("%ld %ld", &n, &k))
	{
		if (k == 0)
		{
			printf("%ld\n", n * n);
			continue;
		}
		for (long j = k + 1;j <= n;j++)
		{
			long help = n % j < k ? 0 : (n % j) - k + 1;
			count += (j - k) * (n / j) + help;
		}
		printf("%ld\n", count);
	}
	return 0;
}